package com.show.service.emp;

import com.show.dao.role.RoleRepository;
import com.show.dao.sys_emp.EmpRepository;
import com.show.dao.sys_emp.EmpRoleRespository;
import com.show.dto.sys_emp.SysEmp;
import com.show.dto.sys_emp.SysEmpOrg;
import com.show.dto.sys_emp.SysEmpRole;
import com.show.dto.sys_org.SysOrg;
import com.show.dto.sys_role.EmpRole;
import com.show.util.Md5Salt;
import com.show.util.QueryUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.Date;
import java.util.List;

/**
 * 人员service
 *
 * @Auther : 白瑜
 * @Param :
 * @date : 2018-01-29 下午 2:42
 */
@Service
@Transactional
public class EmpService {

    @Autowired
    EmpRepository empRepository;

    @Autowired
    RoleRepository roleRepository;

    @Autowired
    QueryUtil queryUtil;

    @Autowired
    private Md5Salt md5Salt;
    @Autowired
    private EmpRoleRespository empRoleRespository;

    public SysEmp getEmp(String loginName, String loginPwd) {
        return empRepository.getEmp(loginName, loginPwd);
    }

    /**
     * 获取当前登陆人角色名称
     * @param id
     * @return
     */
    public String getRoleName(Integer id) {
        return roleRepository.getRoleName(id);
    }

    /**
     * 获取当前登陆人角色ids
     * @param id
     * @return
     */
    public String getRoleIds(Integer id) {
        String sql ="SELECT GROUP_CONCAT(role_id) as roleIds FROM `sys_emp_role`  where emp_id  = " + id;
        if(queryUtil.query(sql,EmpRole.class).get(0).getRoleIds() != "" && queryUtil.query(sql,EmpRole.class).get(0).getRoleIds()  !=null){
            return queryUtil.query(sql,EmpRole.class).get(0).getRoleIds();
        }
        return "";
    }
    public String getRoleId(Integer id) {
        return roleRepository.getRoleId(id);
    }

    /**
     * 根据人员id查询所有部门
     *
     * @author 姜文
     * @time 2017年12月11日, PM 05:02:39
     */
    public List<SysOrg> findOrgByEmpId(String empId) {
        String sql = "SELECT co.* from sys_org as co LEFT JOIN sys_emp_org as eo ON co.org_id = eo.org_id WHERE eo.emp_id = '" + empId + "'";
        List<SysOrg> cgEmpList = queryUtil.query(sql, SysOrg.class);
        return cgEmpList;
    }

    /**
     * 根据empLogin查询用户信息
     *
     * @param empLogin
     * @return
     * @author 王硕
     */
    public SysEmp getEmpByLogin(String empLogin) {
        String sql = "SELECT * FROM `sys_emp` where login_name = '" + empLogin + "'";
        return queryUtil.query(sql, SysEmp.class).get(0);
    }

    /**
     * 根据empId查询roleIds
     *
     * @param empId
     * @return
     * @author 王硕
     */
    public String findEmpRoleIds(Integer empId) {
        String sql = "select GROUP_CONCAT(role_id)  roleIds  from sys_emp_role where emp_id = '" + empId + "'";
        List<EmpRole> list = queryUtil.query(sql, EmpRole.class);
        if (list.size() != 0) {
            return list.get(0).getRoleIds();
        }
        return null;
    }

//    /**
//     * 根据部门id查询所有人员
//     *
//     * @author 姜文
//     * @time 2018年2月1日, PM 03:06:20
//     */
//    public List<SysEmp> findEmpByOrgId(String id) {
//        return commonService.findEmpByOrgId(id);
//    }


    /**
     * 人员校验
     *
     * @param info，条件值
     * @param val，条件值
     * @author yxd
     * @time 2018年2月1日
     */
    public List<SysEmp> checkEmp(String info, String val) {
        String sql = "select * from sys_emp where " + info + "='" + val + "' ";
        List<SysEmp> list = queryUtil.query(sql.toString(), SysEmp.class);
        return list;
    }

    /**
     * 人员校验
     *
     * @param info，条件值
     * @param val，条件值
     * @author yxd
     * @time 2018年2月1日
     */
    public List<SysEmp> checkEmpForUpdate(String info, String val, String id) {
        String sql = "select * from sys_emp where " + info + "='" + val + "' AND emp_id <> '"+id+"'";
        List<SysEmp> list = queryUtil.query(sql.toString(), SysEmp.class);
        return list;
    }

    /**
     * 人员新增
     *
     * @param emp，条件值
     * @author yxd
     * @time 2018年2月1日
     */
    public SysEmp insertEmp(SysEmp emp) {
        Date curDate = new Date(System.currentTimeMillis());//获取当前时间
        emp.setCdate(curDate);
        emp.setSts("1");
        String[] orgIds = emp.getOrgId().split("\\|");
        String[] roleIds = emp.getRoleId().split("\\|");
        String pwd = md5Salt.getMD5(emp.getLoginPwd());
        emp.setLoginPwd(pwd);
        emp.setSalt(md5Salt.getSalt());
        // SysEmp info=empRepository.saveAndFlush(emp);
        for (int i = 0; i < orgIds.length; i++) {
            emp.addEmpOrg(new SysEmpOrg(orgIds[i], curDate));
        }
        for (int i = 0; i < roleIds.length; i++) {
            emp.addEmpRole(new SysEmpRole(roleIds[i], curDate));
        }
        return empRepository.saveAndFlush(emp);
    }


    /**
     * 查看人员ById
     *
     * @param empId
     * @author yxd
     * @time 2018年2月6日
     */
    public SysEmp findOne(int empId) {
        return empRepository.findOneById(empId);
    }


    /**
     * 人员修改
     *
     * @param
     * @author yxd
     * @time 2018年2月6日
     */
    public SysEmp updateAndSave(SysEmp emp) {
        Date curDate = new Date(System.currentTimeMillis());//获取当前时间
        emp.setCdate(curDate);
        emp.setSts(emp.getSts());
        String[] orgIds = emp.getOrgId().split("\\|");
        String[] roleIds = emp.getRoleId().split("\\|");
        empRoleRespository.deleteByEmpId(emp.getEmpId());
//        empOrgRespository.deleteByEmpId(emp.getEmpId());
        for (int i = 0; i < orgIds.length; i++) {
            emp.addEmpOrg(new SysEmpOrg(orgIds[i], curDate));
        }
        for (int i = 0; i < roleIds.length; i++) {
            emp.addEmpRole(new SysEmpRole(roleIds[i], curDate));
        }
        return empRepository.saveAndFlush(emp);
    }


    /**
     * 删除人员ById（逻辑删除）
     *
     * @param empId
     * @author yxd
     * @time 2018年2月6日
     */
    public void delete(int empId) {
        empRepository.deleteEmp(empId);
    }

    /**
     * 删除人员ById（逻辑删除）
     *
     * @param empId
     * @author yxd
     * @time 2018年2月6日
     */
    public void reply(int empId) {
        empRepository.reply(empId);
    }


    /**
     * 删除人员ById（逻辑删除）
     *
     * @param empId
     * @author yxd
     * @time 2018年2月6日
     */
    public void replyPwd(int empId) {
        String pwd = md5Salt.getMD5("123456");
        empRepository.replyPwd(pwd,empId);
    }


    /**
     * 查询网格长(新增)
     *
     * @param orgId
     * @author yxd
     * @time 2018年2月6日
     */
    public List<SysEmp> choseEmpInsert(String orgId) {
        String sql = "select * from sys_emp se \n" +
                "LEFT JOIN sys_emp_role ser ON se.emp_id=ser.emp_id\n" +
                "LEFT JOIN sys_emp_org seo ON se.emp_id=seo.emp_id\n" +
                "where seo.org_id="+orgId+" and ser.role_id=19";
        List<SysEmp> list = queryUtil.query(sql.toString(), SysEmp.class);
        return list;
    }
    /**
     * 查询网格长(修改)
     *
     * @param orgId
     * @param empName
     * @author yxd
     * @time 2018年2月6日
     */
    public List<SysEmp> choseEmpUpdate(String orgId,String empName) {
        String sql = "select * from sys_emp e,sys_emp_org eo " +
                "where e.emp_id=eo.emp_id " +
                "and not EXISTS (select 1 from grid_owner o where o.emp_id=e.emp_id and e.emp_name!='"+empName+"') " +
                "and EXISTS (select 1 from sys_emp_role r where r.emp_id=e.emp_id and r.role_id='19') " +
                "and eo.org_id='" + orgId + "' ";
        List<SysEmp> list = queryUtil.query(sql.toString(), SysEmp.class);
        return list;
    }

    /**
     * 查询用工形式
     *
     * @param
     * @author yxd
     * @time 2018年2月9日
     */
    public List<SysEmp> findModel() {
        String sql = "select kv_id as kv_id,val as kv_val from kv where val_type=4 ";
        List<SysEmp> list = queryUtil.query(sql.toString(), SysEmp.class);
        return list;
    }

    /**
     * 获取当前登陆人的个人信息
     *
     * @param loginName
     * @return list
     * baiyu
     */
    public List<SysEmp> getUserInfo(String loginName) {
        String sql = "SELECT\n" +
                "	e.login_name,\n" +
                "	e.emp_code,\n" +
                "	e.contact_number,\n" +
                "	e.email,\n" +
                "	GROUP_CONCAT(rr.role_name) AS role_name\n" +
                "FROM\n" +
                "	sys_emp e\n" +
                "LEFT JOIN sys_emp_role r ON e.emp_id = r.emp_id\n" +
                "LEFT JOIN sys_role rr ON rr.role_id = r.role_id\n" +
                "WHERE\n" +
                "	e.login_name = ?\n" +
                "GROUP BY\n" +
                "	e.login_name";

        List<SysEmp> list = queryUtil.query(sql, SysEmp.class, new Object[]{loginName});
        return list;
    }

    /**
     * 获取当前登陆人所属部门
     *
     * @param loginName
     * @return
     */
    public List<SysEmp> getUserOrgName(String loginName) {
        String sql = "SELECT\n" +
                "	GROUP_CONCAT(oo.org_name) AS org_name\n" +
                "FROM\n" +
                "	sys_emp e\n" +
                "LEFT JOIN sys_emp_org o ON e.emp_id = o.emp_id\n" +
                "LEFT JOIN sys_org oo ON oo.org_id = o.org_id\n" +
                "WHERE\n" +
                "	e.login_name = ?\n" +
                "GROUP BY\n" +
                "	e.login_name";
        List<SysEmp> list = queryUtil.query(sql, SysEmp.class, new Object[]{loginName});
        return list;
    }

    /**
     * 确认原始密码是否正确
     *
     * @param loginName
     * @return list
     * baiyu
     */
    public List<SysEmp> getPwd(String loginName) {
        String sql = "SELECT * FROM sys_emp e WHERE e.login_name = '" + loginName + "'";
        return queryUtil.query(sql, SysEmp.class);
    }

    public int updatePwd(String pwd, String loginName) {
        int i = empRepository.updatePwd(pwd, loginName);
        return i;
    }

    /**
     * 根据部门获取当前部门下的执法人员
     * @return
     */
    public List<SysEmp> LawEnforcement(String orgIds){
        String sql = "SELECT * from sys_emp LEFT JOIN sys_emp_org USING(emp_id)  LEFT JOIN sys_emp_role USING(emp_id) where FIND_IN_SET(org_id,"+orgIds+") and role_id = 20\n";
        return queryUtil.query(sql,SysEmp.class);
    }

}
